﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL.Utils;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using DAL.DataSet;
using DAL.Entity;
using DAL.Persistencia;
using NewTierra.Reports;

namespace NewTierra.Externo
{
    public partial class TarifarioHotel : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PopularPais();
                PopularPaisServ();
            }
        }

        #region Popular Dados

        protected void PopularPais()
        {
            try
            {
                ddlPaisHotels.DataSource = new PaisDAL().ListarTodos();
                ddlPaisHotels.DataValueField = "PAIS_id";
                ddlPaisHotels.DataTextField = "PAIS_nome";
                ddlPaisHotels.DataBind();

                ddlPaisHotels.SelectedValue = "4";

                PopularCidade();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void ddlPaisHotels_SelectedIndexChanged(object sender, EventArgs e)
        {
            PopularCidade();
        }

        protected void PopularCidade()
        {
            try
            {
                ddlCidadeHotels.DataSource = new CidadeDAL().ListarTodos(Convert.ToInt32(ddlPaisHotels.SelectedValue));
                ddlCidadeHotels.DataValueField = "CID_id";
                ddlCidadeHotels.DataTextField = "CID_nome";
                ddlCidadeHotels.DataBind();
                ddlCidadeHotels.Items.Insert(0, new ListItem("All cities", "0"));
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void PopularPaisServ()
        {
            try
            {
                ddlPaisServices.DataSource = new PaisDAL().ListarTodos();
                ddlPaisServices.DataValueField = "PAIS_id";
                ddlPaisServices.DataTextField = "PAIS_nome";
                ddlPaisServices.DataBind();

                ddlPaisServices.SelectedValue = "4";

                PopularCidadeServ();
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        protected void ddlPaisServices_SelectedIndexChanged(object sender, EventArgs e)
        {
            PopularCidadeServ();
        }

        protected void PopularCidadeServ()
        {
            try
            {
                ddlCidadesServices.DataSource = new CidadeDAL().ListarTodos(Convert.ToInt32(ddlPaisServices.SelectedValue));
                ddlCidadesServices.DataValueField = "CID_id";
                ddlCidadesServices.DataTextField = "CID_nome";
                ddlCidadesServices.DataBind();
                ddlCidadesServices.Items.Insert(0, new ListItem("All cities", "0"));
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

        #endregion

        #region Modelos

        public class ModeloServico
        {

            private string idServico;
            public string IdServico
            {
                get { return idServico; }
                set { idServico = value; }
            }

            private string idSupplier;
            public string IdSupplier
            {
                get { return idSupplier; }
                set { idSupplier = value; }
            }


        }

        public class ModeloCidade
        {

            private string idCidade;
            public string IdCidade
            {
                get { return idCidade; }
                set { idCidade = value; }
            }

            private string sigla;
            public string Sigla
            {
                get { return sigla; }
                set { sigla = value; }
            }


        }

        #endregion

        #region Reports

        protected void btnEmitirRelatorioGeral_Click(object sender, EventArgs e)
        {
            //try
            //{

            string NomeEmpresa = ConfigurationManager.AppSettings["NomeEmpresa"];
            string EnderecoEmpresa = ConfigurationManager.AppSettings["EnderecoEmpresa"];
            string ContatoEmpresa = ConfigurationManager.AppSettings["ContatoEmpresa"];

            decimal markup = Convert.ToDecimal("42,86");

            decimal tarifaTotalMarkup = 0;
            decimal tarifaTotalMarkup2 = 0;
            decimal tarifaTotalMarkup3 = 0;

            RptSupplierTarifas rpt = new RptSupplierTarifas();

            Utils utils = new Utils();

            SupplierDAL spd = new SupplierDAL();
            PeriodosDAL perd = new PeriodosDAL();
            TarifaDAL tad = new TarifaDAL();
            TarifCategoriaDAL tcgd = new TarifCategoriaDAL();

            DSSupplierTarifas ds = new DSSupplierTarifas();

            DataTable dt = ds.Tables["SUPPLIERTARIFAS"];

            string[] pars = ConfigurationManager.ConnectionStrings["NewTierraEntities"].ToString().Split('\"');
            SqlConnection Con = new SqlConnection(pars[1]);
            string sql;

            DateTime dataFrom = DateTime.ParseExact(txtfromReport.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            DateTime dataTo = DateTime.ParseExact(txttoReport.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

            Con.Open();

            sql = "SELECT Cidade.CID_nome, S_Mercado_Periodo.S_merc_periodo_id, S_Categoria.Categ_classificacao + ' - ' + Supplier.S_nome AS S_nome, ";
            sql = sql + "S_Mercado_Periodo.S_merc_periodo_from, S_Mercado_Periodo.S_merc_periodo_to, S_Mercado_Periodo.S_merc_periodo_fdsFrom, ";
            sql = sql + "S_Mercado_Periodo.S_merc_periodo_fdsTo, S_Mercado_Tipo_Tarifa.S_mercado_tipo_tarifa_nome, Tipo_Room.Tipo_room_nome, ";
            sql = sql + "Tarif_Categoria.Tarif_categoria_nome, S_Mercado_Tarifa.S_merc_tarif_tarifa_total, S_Mercado_Tarifa_Status.S_mercado_tarifa_status_nome, Moeda.Moeda_id, ";
            sql = sql + "Moeda.Moeda_sigla, S_Mercado_Tarifa.S_merc_tarif_porPessoa, S_Mercado_Tarifa.S_merc_tarif_porApartamento, S_Mercado_Tarifa.S_merc_tarif_status_id ";

            sql = sql + ", S_Mercado_Periodo.Pacote_nome, S_Mercado_Periodo.S_merc_periodo_minimo, S_Mercado_Periodo.S_merc_periodo_mandatorio, S_Mercado_Estacao.S_mercado_estacao_nome, S_Mercado_Estacao.S_mercado_estacao_pacote, MinimoNoites.MinimoNoites_qtd ";


            sql = sql + "FROM Supplier ";
            sql = sql + "INNER JOIN S_Mercado_Periodo ON Supplier.S_id = S_Mercado_Periodo.S_id ";
            sql = sql + "INNER JOIN S_Mercado_Tarifa ON S_Mercado_Periodo.S_merc_periodo_id = S_Mercado_Tarifa.S_merc_periodo_id ";
            sql = sql + "INNER JOIN Tarif_Categoria ON S_Mercado_Tarifa.Tarif_categoria_id = Tarif_Categoria.Tarif_categoria_id ";
            sql = sql + "INNER JOIN Tipo_Room ON S_Mercado_Tarifa.Tipo_room_id = Tipo_Room.Tipo_room_id ";
            sql = sql + "INNER JOIN S_Mercado_Tipo_Tarifa ON S_Mercado_Tarifa.S_mercado_tipo_tarifa_id = S_Mercado_Tipo_Tarifa.S_mercado_tipo_tarifa_id ";
            sql = sql + "INNER JOIN Moeda ON S_Mercado_Periodo.Moeda_id = Moeda.Moeda_id ";
            sql = sql + "INNER JOIN Cidade ON Supplier.CID_id = Cidade.CID_id ";
            sql = sql + "INNER JOIN S_Categoria ON Supplier.Categ_id = S_Categoria.Categ_id ";

            sql = sql + "INNER JOIN S_Mercado_Estacao ON S_Mercado_Periodo.S_mercado_estacao_id = S_Mercado_Estacao.S_mercado_estacao_id ";
            sql = sql + "LEFT OUTER JOIN MinimoNoites ON S_Mercado_Periodo.MinimoNoites_id = MinimoNoites.MinimoNoites_id ";

            sql = sql + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa.S_merc_tarif_status_id = S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id ";

            sql = sql + " WHERE (S_Mercado_Periodo.S_merc_periodo_from <= '" + dataFrom.ToString("yyyyMMdd") + "') AND (S_Mercado_Periodo.S_merc_periodo_to >= '" + dataTo.ToString("yyyyMMdd") + "') ";

            if (!ddlCidadeHotels.SelectedValue.Equals("0"))
            {
                sql = sql + " AND Supplier.CID_id =" + Convert.ToInt32(ddlCidadeHotels.SelectedValue);
            }

            sql = sql + " AND S_Mercado_Periodo.Mercado_id = 6";

            sql = sql + " AND S_Mercado_Periodo.BaseTarifaria_id = 1";                       

            sql = sql + " AND S_Mercado_Tipo_Tarifa.S_mercado_tipo_tarifa_id = 1";            

            ///////////////////COMEÇAR OR

            sql = sql + " OR (S_Mercado_Periodo.S_merc_periodo_from <= '" + dataTo.ToString("yyyyMMdd") + "') AND (S_Mercado_Periodo.S_merc_periodo_to >= '" + dataFrom.ToString("yyyyMMdd") + "') ";

            if (!ddlCidadeHotels.SelectedValue.Equals("0"))
            {
                sql = sql + " AND Supplier.CID_id =" + Convert.ToInt32(ddlCidadeHotels.SelectedValue);
            }

            sql = sql + " AND S_Mercado_Periodo.Mercado_id = 6";

            sql = sql + " AND S_Mercado_Periodo.BaseTarifaria_id = 1";

            sql = sql + " AND S_Mercado_Tipo_Tarifa.S_mercado_tipo_tarifa_id = 1";                  

            sql = sql + " ORDER BY CID_Nome, S_Mercado_Periodo.S_merc_periodo_id, S_nome, Tarif_categoria_nome, S_mercado_tipo_tarifa_nome, Tipo_room_nome";


            SqlCommand cmd = new SqlCommand(sql, Con);
            SqlDataReader reader = cmd.ExecuteReader();
            MealDAL mealDAL = new MealDAL();

            string idPeriodo = "";
            string nomeSupplier = "";
            string nomeCategoria = "";
            string nomeTarifa = "";
            string nomeMeal = "";
            bool retornou = false;
            //string nomeRoom = "";

            string supplier = "";

            DataRow drw = dt.NewRow();

            decimal cambio = 1;

            while (reader.Read())
            {
                retornou = true;

                tarifaTotalMarkup = 0;
                string teste111 = reader["S_merc_tarif_tarifa_total"].ToString();

                if (!reader["S_merc_tarif_tarifa_total"].ToString().Equals("") && markup != 0)
                {
                    tarifaTotalMarkup = Convert.ToDecimal(reader["S_merc_tarif_tarifa_total"]) + ((Convert.ToDecimal(reader["S_merc_tarif_tarifa_total"]) * markup) / 100);
                }
                else
                {
                    if (!reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                    {
                        tarifaTotalMarkup = Convert.ToDecimal(reader["S_merc_tarif_tarifa_total"]);
                    }
                }


                if (Convert.ToInt32(reader["Moeda_id"]) != 1)
                {
                    cambio = utils.CalcularCambio(Convert.ToInt32(reader["Moeda_id"]), 1);
                }


                if (idPeriodo.Equals(reader["S_merc_periodo_id"].ToString()) && nomeSupplier.Equals(reader["S_nome"].ToString()) && nomeCategoria.Equals(reader["Tarif_categoria_nome"].ToString()) && nomeTarifa.Equals(reader["S_mercado_tipo_tarifa_nome"].ToString()))
                {
                    if (Convert.ToInt32(reader["Moeda_id"]) == 1)
                    {
                        if (reader["Tipo_room_nome"].ToString().Equals("Single"))
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["SingleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {                               
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {                                    
                                    drw["Single"] = arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"]);
                                }
                                else
                                {
                                    drw["Single"] = arrendodar(tarifaTotalMarkup);
                                }
                            }
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Double"))
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["DoubleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Double"] = ((arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 2);
                                }
                                else
                                {
                                    drw["Double"] = arrendodar(tarifaTotalMarkup / 2);
                                }
                            }
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Triple"))
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["TripleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Triple"] = ((arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 3);
                                }
                                else
                                {
                                    drw["Triple"] = arrendodar(tarifaTotalMarkup / 3);
                                }
                            }
                        }
                        else
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["QuadrupleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Quadruple"] = ((arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 4);
                                }
                                else
                                {
                                    drw["Quadruple"] = arrendodar(tarifaTotalMarkup / 4);
                                }
                            }
                        }
                    }

                    else
                    {

                        string valor = reader["S_merc_tarif_tarifa_total"].ToString();

                        if (valor.Equals(""))
                        {
                            valor = "0";
                        }
                        else
                        {
                            valor = tarifaTotalMarkup.ToString();
                        }

                        decimal total = Convert.ToDecimal(valor) * cambio;

                        total = arrendodar(total);
                        string totalString = Convert.ToString(total.ToString("N2"));
                        if (valor.Equals("0"))
                        {
                            totalString = "";

                        }

                        if (reader["Tipo_room_nome"].ToString().Equals("Single"))
                        {
                            if (valor.Equals("0"))
                            {
                                drw["SingleString"] = reader["S_mercado_tarifa_status_nome"].ToString();
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Single"] = Convert.ToDecimal(totalString) * Convert.ToInt32(reader["MinimoNoites_qtd"]);
                                }
                                else
                                {
                                    drw["Single"] = totalString;
                                }
                            }
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Double"))
                        {
                            if (valor.Equals("0"))
                            {
                                drw["DoubleString"] = reader["S_mercado_tarifa_status_nome"].ToString();
                            }
                            else
                            {

                                if (totalString.Equals(""))
                                {
                                    drw["Double"] = totalString;
                                }
                                else
                                {
                                    if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                    {

                                        drw["Double"] = ((Convert.ToDecimal(totalString) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 2);
                                    }
                                    else
                                    {
                                        drw["Double"] = Convert.ToDecimal(totalString) / 2;
                                    }
                                }                                
                            }
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Triple"))
                        {
                            if (valor.Equals("0"))
                            {
                                drw["TripleString"] = reader["S_mercado_tarifa_status_nome"].ToString();
                            }
                            else
                            {
                                if (totalString.Equals(""))
                                {
                                    drw["Triple"] = totalString;
                                }
                                else
                                {
                                    if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                    {
                                        drw["Triple"] = ((Convert.ToDecimal(totalString) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 3);
                                    }
                                    else
                                    {
                                        drw["Triple"] = Convert.ToDecimal(totalString) / 3;
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (valor.Equals("0"))
                            {
                                drw["QuadrupleString"] = reader["S_mercado_tarifa_status_nome"].ToString();
                            }
                            else
                            {
                                if (totalString.Equals(""))
                                {
                                    drw["Quadruple"] = totalString;
                                }
                                else
                                {
                                    if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                    {
                                        drw["Quadruple"] = ((Convert.ToDecimal(totalString) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 4);
                                    }
                                    else
                                    {
                                        drw["Quadruple"] = Convert.ToDecimal(totalString) / 4;
                                    }
                                }
                            }
                        }
                    }
                }
                else
                {

                    if (!idPeriodo.Equals("") && !nomeSupplier.Equals("") && !nomeCategoria.Equals("") && !nomeTarifa.Equals(""))
                    {

                        string sql2;

                        sql2 = "select S_meal_nome, S_mercado_tarifa_status_nome, S_merc_meal_tarifa_total ";
                        sql2 = sql2 + "from S_Mercado_Meal mm ";
                        sql2 = sql2 + "INNER JOIN S_Meal m ON m.S_meal_id = mm.S_meal_id ";
                        sql2 = sql2 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status mts ON mts.S_mercado_tarifa_status_id = mm.S_merc_tarif_status_id ";
                        sql2 = sql2 + "where mm.S_merc_periodo_id = " + idPeriodo;

                        SqlCommand cmd2 = new SqlCommand(sql2, Con);
                        SqlDataReader reader2 = cmd2.ExecuteReader();


                        //Decimal cambio = utils.CalcularCambio(Convert.ToInt32(reader["Moeda_id"]), Convert.ToInt32(ddlCambioReport.SelectedValue));

                        while (reader2.Read())
                        {

                            tarifaTotalMarkup2 = 0;
                            if (!reader2["S_merc_meal_tarifa_total"].ToString().Equals("") && markup != 0)
                            {
                                tarifaTotalMarkup2 = Convert.ToDecimal(reader2["S_merc_meal_tarifa_total"]) + ((Convert.ToDecimal(reader2["S_merc_meal_tarifa_total"]) * markup) / 100);
                            }
                            else
                            {
                                if (!reader2["S_merc_meal_tarifa_total"].ToString().Equals(""))
                                {
                                    tarifaTotalMarkup2 = Convert.ToDecimal(reader2["S_merc_meal_tarifa_total"]);
                                }
                            }


                            //string teste44 = reader2["S_meal_nome"].ToString();

                            if (reader2["S_meal_nome"].ToString().Equals("Breakfast") || reader2["S_meal_nome"].ToString().Equals("Buffet breakfast"))
                            {
                                if (reader2["S_mercado_tarifa_status_nome"].ToString().Equals(""))
                                {
                                    drw["Breakfast"] = arrendodar(Convert.ToDecimal(tarifaTotalMarkup2 * cambio)).ToString("N2");
                                }
                                else
                                {
                                    drw["Breakfast"] = reader2["S_mercado_tarifa_status_nome"];
                                }
                            }
                            else if (reader2["S_meal_nome"].ToString().Equals("Half Board"))
                            {
                                if (reader2["S_mercado_tarifa_status_nome"].ToString().Equals(""))
                                {
                                    drw["Half Board"] = arrendodar(Convert.ToDecimal(tarifaTotalMarkup2 * cambio)).ToString("N2");
                                }
                                else
                                {
                                    drw["Half Board"] = reader2["S_mercado_tarifa_status_nome"];
                                }
                                //drw["Half Board"] = reader3["S_mercado_tarifa_status_nome"];
                            }
                            else if (reader2["S_meal_nome"].ToString().Equals("Full Board"))
                            {
                                if (reader2["S_mercado_tarifa_status_nome"].ToString().Equals(""))
                                {
                                    drw["Full Board"] = arrendodar(Convert.ToDecimal(tarifaTotalMarkup2 * cambio)).ToString("N2");
                                }
                                else
                                {
                                    drw["Full Board"] = reader2["S_mercado_tarifa_status_nome"];
                                }
                                //drw["Full Board"] = reader3["S_mercado_tarifa_status_nome"];
                            }
                        }

                        dt.Rows.Add(drw);

                    }


                    drw = dt.NewRow();

                    drw["S_nome"] = reader["S_nome"].ToString();
                    drw["Per_From"] = Convert.ToDateTime(reader["S_merc_periodo_from"]);

                    drw["dtFrom"] = string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:MMM, dd yy}", reader["S_merc_periodo_from"]);
                    drw["dtTo"] = string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:MMM, dd yy}", reader["S_merc_periodo_to"]);

                    if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                    {
                        drw["Classificacao"] = reader["S_mercado_estacao_nome"].ToString() + " " + reader["MinimoNoites_qtd"] + " Nights Mandatory";
                    }

                    //txtNomePacote
                    //drw["Per_To"] = Convert.ToDateTime(reader["S_merc_periodo_to"]);


                    drw["TipoTarifaNome"] = reader["S_mercado_tipo_tarifa_nome"].ToString();

                    if (!reader["S_merc_periodo_fdsTo"].ToString().Equals(""))
                    {
                        drw["CategoriaNome"] = reader["Tarif_categoria_nome"].ToString() + " - " + reader["S_merc_periodo_fdsFrom"].ToString() + " / " + reader["S_merc_periodo_fdsTo"].ToString();
                    }
                    else
                    {
                        drw["CategoriaNome"] = reader["Tarif_categoria_nome"].ToString();
                    }



                    drw["Cidade"] = reader["CID_nome"].ToString();


                    if (Convert.ToInt32(reader["Moeda_id"]) == 1)
                    {

                        if (reader["Tipo_room_nome"].ToString().Equals("Single"))
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["SingleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Single"] = arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"]);
                                }
                                else
                                {
                                    drw["Single"] = arrendodar(tarifaTotalMarkup);
                                }
                            }
                            
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Double"))
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["DoubleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Double"] = ((arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 2);
                                }
                                else
                                {
                                    drw["Double"] = arrendodar(tarifaTotalMarkup / 2);
                                }
                            }
                            
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Triple"))
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["TripleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Triple"] = ((arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 3);
                                }
                                else
                                {
                                    drw["Triple"] = arrendodar(tarifaTotalMarkup / 3);
                                }
                            }                            
                        }
                        else
                        {
                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["QuadrupleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Quadruple"] = ((arrendodar(tarifaTotalMarkup) * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 4);
                                }
                                else
                                {
                                    drw["Quadruple"] = arrendodar(tarifaTotalMarkup / 4);
                                }
                            }
                        }

                    }

                    else
                    {

                        string valor = reader["S_merc_tarif_tarifa_total"].ToString();

                        if (valor.Equals(""))
                        {
                            valor = "0";
                        }
                        else
                        {
                            valor = tarifaTotalMarkup.ToString();
                        }

                        decimal total = arrendodar(Convert.ToDecimal(valor) * cambio);
                        string totalString = Convert.ToString(total.ToString("N2"));

                        if (valor.Equals("0"))
                        {
                            totalString = "";
                        }

                        if (reader["Tipo_room_nome"].ToString().Equals("Single"))
                        {

                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["SingleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Single"] = total * Convert.ToInt32(reader["MinimoNoites_qtd"]);
                                }
                                else
                                {
                                    drw["Single"] = total;
                                }
                            }                            
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Double"))
                        {

                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["DoubleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Double"] = ((total * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 2);
                                }
                                else
                                {
                                    drw["Double"] = total / 2;
                                }
                            }                            
                        }
                        else if (reader["Tipo_room_nome"].ToString().Equals("Triple"))
                        {

                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["TripleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Triple"] = ((total * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 3);
                                }
                                else
                                {
                                    drw["Triple"] = total / 3;
                                }
                            }                            
                        }
                        else
                        {

                            if (reader["S_merc_tarif_tarifa_total"].ToString().Equals(""))
                            {
                                drw["QuadrupleString"] = reader["S_mercado_tarifa_status_nome"];
                            }
                            else
                            {
                                if (!reader["S_mercado_estacao_pacote"].ToString().Equals("") && !reader["S_merc_periodo_mandatorio"].ToString().Equals(""))
                                {
                                    drw["Quadruple"] = ((total * Convert.ToInt32(reader["MinimoNoites_qtd"])) / 4);
                                }
                                else
                                {
                                    drw["Quadruple"] = total / 4;
                                }
                            }                            
                        }
                    }



                    //drw["TipoRoom"] = reader["Tipo_room_nome"].ToString();
                    //drw["TarifaTotal"] = reader["S_merc_tarif_tarifa_total"];
                    drw["TarifaStatus"] = reader["S_mercado_tarifa_status_nome"].ToString();
                    drw["Moeda"] = reader["Moeda_sigla"].ToString();

                    if (reader["S_merc_tarif_porApartamento"].ToString() != "")
                    {
                        drw["Por_Apt"] = "Por Apartamento";
                    }

                    if (reader["S_merc_tarif_porPessoa"].ToString() != "")
                    {
                        drw["Por_Pessoa"] = "Por Pessoa";
                    }

                    supplier = reader["S_nome"].ToString();

                    idPeriodo = reader["S_merc_periodo_id"].ToString();
                    nomeSupplier = reader["S_nome"].ToString();
                    nomeCategoria = reader["Tarif_categoria_nome"].ToString();
                    nomeTarifa = reader["S_mercado_tipo_tarifa_nome"].ToString();
                    //nomeMeal = reader["S_meal_nome"].ToString();


                    //dt.Rows.Add(drw);

                }

            }

            if (retornou)
            {

                string sql3;

                sql3 = "select S_meal_nome, S_mercado_tarifa_status_nome, S_merc_meal_tarifa_total ";
                sql3 = sql3 + "from S_Mercado_Meal mm ";
                sql3 = sql3 + "INNER JOIN S_Meal m ON m.S_meal_id = mm.S_meal_id ";
                sql3 = sql3 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status mts ON mts.S_mercado_tarifa_status_id = mm.S_merc_tarif_status_id ";
                sql3 = sql3 + "where mm.S_merc_periodo_id = " + idPeriodo;

                SqlCommand cmd3 = new SqlCommand(sql3, Con);
                SqlDataReader reader3 = cmd3.ExecuteReader();

                while (reader3.Read())
                {
                    tarifaTotalMarkup3 = 0;

                    if (!reader3["S_merc_meal_tarifa_total"].ToString().Equals("") && markup != 0)
                    {
                        tarifaTotalMarkup3 = Convert.ToDecimal(reader3["S_merc_meal_tarifa_total"]) + ((Convert.ToDecimal(reader3["S_merc_meal_tarifa_total"]) * markup) / 100);
                    }
                    else
                    {
                        if (!reader3["S_merc_meal_tarifa_total"].ToString().Equals(""))
                        {
                            tarifaTotalMarkup3 = Convert.ToDecimal(reader3["S_merc_meal_tarifa_total"]);
                        }
                    }

                    if (reader3["S_meal_nome"].ToString().Equals("Breakfast") || reader3["S_meal_nome"].ToString().Equals("Buffet breakfast"))
                    {
                        if (reader3["S_mercado_tarifa_status_nome"].ToString().Equals(""))
                        {
                            drw["Breakfast"] = arrendodar(tarifaTotalMarkup3 * cambio);
                        }
                        else
                        {
                            drw["Breakfast"] = reader3["S_mercado_tarifa_status_nome"];
                        }
                    }
                    else if (reader3["S_meal_nome"].ToString().Equals("Half Board"))
                    {
                        if (reader3["S_mercado_tarifa_status_nome"].ToString().Equals(""))
                        {
                            drw["Half Board"] = arrendodar(tarifaTotalMarkup3 * cambio);
                        }
                        else
                        {
                            drw["Half Board"] = reader3["S_mercado_tarifa_status_nome"];
                        }                        
                    }
                    else if (reader3["S_meal_nome"].ToString().Equals("Full Board"))
                    {
                        if (reader3["S_mercado_tarifa_status_nome"].ToString().Equals(""))
                        {
                            drw["Full Board"] = arrendodar(tarifaTotalMarkup3 * cambio);
                        }
                        else
                        {
                            drw["Full Board"] = reader3["S_mercado_tarifa_status_nome"];
                        }                        
                    }


                }
            }

            dt.Rows.Add(drw);
            int numero = dt.Rows.Count;

            MoedaDAL moedaDAL = new MoedaDAL();
            Moeda moeda = new Moeda();
            string sigla = "$";            
            

            CrystalDecisions.CrystalReports.Engine.TextObject ObjNomeEmpresa = rpt.ReportDefinition.Sections[1].ReportObjects["txtNomeEmpresa"] as TextObject;
            CrystalDecisions.CrystalReports.Engine.TextObject ObjEnderecoEmpresa = rpt.ReportDefinition.Sections[1].ReportObjects["txtEnderecoEmpresa"] as TextObject;
            CrystalDecisions.CrystalReports.Engine.TextObject ObjContatoEmpresa = rpt.ReportDefinition.Sections[1].ReportObjects["txtContato"] as TextObject;
            CrystalDecisions.CrystalReports.Engine.TextObject ObjMoeda = rpt.ReportDefinition.Sections[1].ReportObjects["txtMoeda"] as TextObject;
            ObjNomeEmpresa.Text = NomeEmpresa;
            ObjEnderecoEmpresa.Text = EnderecoEmpresa;
            ObjContatoEmpresa.Text = ContatoEmpresa;
            ObjMoeda.Text = sigla;

            int valor33 = dt.Rows.Count;

            rpt.SetDataSource(dt);


            switch (ddlTypeReportHotels.SelectedValue)
            {
                case "1":
                    rpt.ExportToHttpResponse(
                        ExportFormatType.PortableDocFormat,
                        Response, true, "Tarifas Supplier");
                    break;

                case "2":
                    rpt.ExportToHttpResponse(
                        ExportFormatType.WordForWindows,
                        Response, true, "Tarifas Supplier");
                    break;

                case "3":
                    rpt.ExportToHttpResponse(
                        ExportFormatType.Excel,
                        Response, true, "Tarifas Supplier");
                    break;
            }


            Con.Close();           

        }        

        protected void btnGerarRelatorioServicoTarifario_Click(object sender, EventArgs e)
        {

            try
            {

                DSServicos ds = new DSServicos();

                DataTable dt = ds.Tables["Servicos"];

                string[] pars = ConfigurationManager.ConnectionStrings["NewTierraEntities"].ToString().Split('\"');
                SqlConnection Con = new SqlConnection(pars[1]);
                string sql;
                string sql2;
                string sql3;
                string sql4;
                string sql5;
                string sql6;
                string sql7;
                string sql8;

                bool cabecalho = true;
                bool sib = true;
                bool naoSib = true;
                bool adiciona = false;

                DateTime dataFrom = DateTime.ParseExact(txtFromServices.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                DateTime dataTo = DateTime.ParseExact(txtToServices.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                decimal markUp = Convert.ToDecimal("42,86");
                //decimal markUp = 0;
                //if (!txtMarkUpRelatorioTarifario.Text.Equals(""))
                //{
                //    markUp = Convert.ToDecimal(txtMarkUpRelatorioTarifario.Text);
                //}

                decimal cambio = 1;
                decimal total;
                string totalString;
                Utils utils = new Utils();

                Con.Open();

                sql = "SELECT DISTINCT(S_Servicos.Cid_Id), Cidade.CID_nome, Cidade.CID_uf ";
                sql = sql + "FROM Monta_Servico_Valores  ";
                sql = sql + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                sql = sql + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                sql = sql + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                sql = sql + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                sql = sql + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                sql = sql + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id = Monta_Servico_Valores.S_mercado_tarifa_status_id ";
                sql = sql + "WHERE S_Servicos.PAIS_id = " + Convert.ToInt32(ddlPaisServices.SelectedValue);
                if (Convert.ToInt32(ddlCidadesServices.SelectedValue) != 0)
                {
                    sql = sql + " AND S_Servicos.Cid_Id = " + Convert.ToInt32(ddlCidadesServices.SelectedValue);
                }
                sql = sql + " ORDER BY 2 ";

                SqlCommand cmd = new SqlCommand(sql, Con);
                SqlDataReader reader = cmd.ExecuteReader();

                DataRow drw = dt.NewRow();

                List<ModeloCidade> listaCidades = new List<ModeloCidade>();
                ModeloCidade modeloCidade = new ModeloCidade();

                string cidade;

                List<ModeloServico> listaServicos;
                ModeloServico servicos;

                List<string> listaBases;

                string d;
                string idSupplier = "";

                while (reader.Read())
                {
                    modeloCidade = new ModeloCidade();
                    modeloCidade.IdCidade = reader["Cid_Id"].ToString();
                    modeloCidade.Sigla = reader["CID_uf"].ToString();

                    listaCidades.Add(modeloCidade);
                }


                foreach (ModeloCidade item in listaCidades)
                {

                    cabecalho = true;
                    sib = true;
                    naoSib = true;


                    sql2 = "SELECT DISTINCT S_Servicos.Servicos_Nome, S_Servicos.Servicos_Id, Supplier.S_nome, Cidade.CID_nome, 'SIB' = case when S_Servicos.SIB IS NULL then (0) ELSE S_Servicos.SIB end, S_Servicos_Tipo_Categ.Ordenacao ";
                    sql2 = sql2 + "FROM  Supplier ";
                    sql2 = sql2 + "INNER JOIN S_Bases ON Supplier.S_id = S_Bases.S_id ";
                    sql2 = sql2 + "INNER JOIN Monta_Servico ON Supplier.S_id = Monta_Servico.S_id ";
                    sql2 = sql2 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico_Temporada ";
                    sql2 = sql2 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";

                    sql2 = sql2 + "INNER JOIN S_Servicos_Tipo_Categ ON S_Servicos.Tipo_categ_id = S_Servicos_Tipo_Categ.Tipo_categ_id ";

                    sql2 = sql2 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";

                    sql2 = sql2 + "WHERE S_Servicos.Cid_Id = " + item.IdCidade;
                    sql2 = sql2 + " AND MServico_DataFrom <= '" + dataFrom.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataTo.ToString("yyyyMMdd") + "'";


                    sql2 = sql2 + "AND BaseTarifaria_id = 1 ";

                    sql2 = sql2 + "AND Mercado_id = 6 ";


                    if (!item.Sigla.Equals("RJ"))
                    {
                        sql2 = sql2 + " AND Supplier.Tarifario = 'True' ";
                    }

                    /////// COMEÇA OR

                    sql2 = sql2 + " OR S_Servicos.Cid_Id = " + item.IdCidade;
                    sql2 = sql2 + " AND MServico_DataFrom <= '" + dataTo.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataFrom.ToString("yyyyMMdd") + "'";
                    sql2 = sql2 + " AND BaseTarifaria_id = 1 ";
                    sql2 = sql2 + " AND Mercado_id = 6 ";

                    if (!item.Sigla.Equals("RJ"))
                    {
                        sql2 = sql2 + " AND Supplier.Tarifario = 'True' ";
                    }

                    sql2 = sql2 + "UNION ALL ";

                    sql2 = sql2 + "SELECT DISTINCT S_Servicos.Servicos_Nome, S_Servicos.Servicos_Id, Supplier.S_nome, Cidade.CID_nome, 'SIB' = case when S_Servicos.SIB IS NULL then (0) ELSE S_Servicos.SIB end, S_Servicos_Tipo_Categ.Ordenacao ";
                    sql2 = sql2 + "FROM Monta_Servico_Valores ";
                    sql2 = sql2 + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                    sql2 = sql2 + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                    sql2 = sql2 + "INNER JOIN Supplier ON Supplier.S_id = S_Bases.S_id ";
                    sql2 = sql2 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                    sql2 = sql2 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";

                    sql2 = sql2 + "INNER JOIN S_Servicos_Tipo_Categ ON S_Servicos.Tipo_categ_id = S_Servicos_Tipo_Categ.Tipo_categ_id ";

                    sql2 = sql2 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                    sql2 = sql2 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id = Monta_Servico_Valores.S_mercado_tarifa_status_id ";
                    sql2 = sql2 + "WHERE S_Servicos.Cid_Id = " + item.IdCidade;
                    sql2 = sql2 + " AND MServico_DataFrom <= '" + dataFrom.ToString("yyyyMMdd") + "' AND MServico_DataTo >= '" + dataTo.ToString("yyyyMMdd") + "'";

                   
                        sql2 = sql2 + " AND BaseTarifaria_id = 1 ";


                        sql2 = sql2 + " AND Mercado_id = 6 ";
                    

                    if (!item.Sigla.Equals("RJ"))
                    {
                        sql2 = sql2 + " AND Supplier.Tarifario = 'True' ";
                    }

                    sql2 = sql2 + " AND SubServico is not null ";


                    /////COMEÇA O OR

                    sql2 = sql2 + " OR S_Servicos.Cid_Id = " + item.IdCidade;
                    sql2 = sql2 + " AND MServico_DataFrom <= '" + dataTo.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataFrom.ToString("yyyyMMdd") + "'";
                    sql2 = sql2 + " AND BaseTarifaria_id = 1 ";
                    sql2 = sql2 + " AND Mercado_id = 6 ";

                    if (!item.Sigla.Equals("RJ"))
                    {
                        sql2 = sql2 + " AND Supplier.Tarifario = 'True' ";
                    }

                    sql2 = sql2 + " AND SubServico is not null ";


                    sql2 = sql2 + "ORDER BY 'SIB', S_Servicos_Tipo_Categ.Ordenacao ";

                    SqlCommand cmd2 = new SqlCommand(sql2, Con);
                    SqlDataReader reader2 = cmd2.ExecuteReader();

                    listaServicos = new List<ModeloServico>();
                    cidade = "";

                    bool preenche = false;
                    while (reader2.Read())
                    {
                        cidade = reader2["CID_nome"].ToString();

                        servicos = new ModeloServico();
                        servicos.IdServico = reader2["Servicos_Id"].ToString();
                        servicos.IdSupplier = "";
                        listaServicos.Add(servicos);

                        preenche = true;
                    }

                    if (preenche)
                    {
                        drw = dt.NewRow();
                        drw["CServico"] = cidade;
                        dt.Rows.Add(drw);
                    }



                    foreach (ModeloServico item2 in listaServicos)
                    {



                        sql6 = "SELECT DISTINCT(Servico_Completo.SubServico) ";
                        sql6 = sql6 + "FROM Monta_Servico_Valores  ";
                        sql6 = sql6 + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                        sql6 = sql6 + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                        sql6 = sql6 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                        sql6 = sql6 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                        sql6 = sql6 + "WHERE S_Servicos.Servicos_Id = " + item2.IdServico;

                        SqlCommand cmd6 = new SqlCommand(sql6, Con);
                        SqlDataReader reader6 = cmd6.ExecuteReader();

                        bool subServico = false;
                        string txtSubServico = "";

                        while (reader6.Read())
                        {

                            txtSubServico = reader6["SubServico"].ToString();
                            if (!txtSubServico.Equals(""))
                            {
                                subServico = true;
                            }
                        }

                        if (!subServico)
                        {




                            sql3 = "SELECT DISTINCT(CAST(Base_de AS VARCHAR(5)) + '/' + CAST(Base_ate AS VARCHAR(5))) as Base, Base_ate, S_Servicos.Servicos_Nome, S_Servicos.SIB ";
                            sql3 = sql3 + "FROM S_Bases_Valor ";
                            sql3 = sql3 + "INNER JOIN Monta_Servico ON S_Bases_Valor.IdMServico = Monta_Servico.IdMServico ";
                            sql3 = sql3 + "INNER JOIN S_Bases ON S_Bases_Valor.Base_id = S_Bases.Base_id ";
                            sql3 = sql3 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico_Temporada ";
                            sql3 = sql3 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                            sql3 = sql3 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                            sql3 = sql3 + "WHERE S_Servicos.Servicos_Id = " + item2.IdServico;
                            sql3 = sql3 + " ORDER BY Base_ate ";
                        }
                        else
                        {


                            sql8 = "SELECT TOP(1) Monta_Servico.S_id ";
                            sql8 = sql8 + "FROM Monta_Servico_Valores  ";
                            sql8 = sql8 + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                            sql8 = sql8 + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                            sql8 = sql8 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                            sql8 = sql8 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                            sql8 = sql8 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                            sql8 = sql8 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id = Monta_Servico_Valores.S_mercado_tarifa_status_id ";
                            sql8 = sql8 + "WHERE S_Servicos.Cid_Id = " + item.IdCidade;
                            sql8 = sql8 + " AND S_Servicos.Servicos_Id = " + item2.IdServico; ;
                            sql8 = sql8 + " ORDER BY S_id ";

                            SqlCommand cmd8 = new SqlCommand(sql8, Con);
                            SqlDataReader reader8 = cmd8.ExecuteReader();

                            while (reader8.Read())
                            {
                                item2.IdSupplier = reader8["S_id"].ToString();
                            }


                            sql3 = "SELECT DISTINCT(CAST(Base_de AS VARCHAR(5)) + '/' + CAST(Base_ate AS VARCHAR(5))) as Base, Base_ate, S_Servicos.Servicos_Nome, S_Servicos.SIB ";
                            sql3 = sql3 + "FROM Monta_Servico_Valores  ";
                            sql3 = sql3 + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                            sql3 = sql3 + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                            sql3 = sql3 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                            sql3 = sql3 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                            sql3 = sql3 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                            sql3 = sql3 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id = Monta_Servico_Valores.S_mercado_tarifa_status_id ";
                            sql3 = sql3 + "WHERE S_Servicos.Servicos_Id = " + item2.IdServico;
                            sql3 = sql3 + "AND Monta_Servico.S_id = " + item2.IdSupplier;
                            sql3 = sql3 + " ORDER BY Base_ate ";
                        }


                        SqlCommand cmd3 = new SqlCommand(sql3, Con);
                        SqlDataReader reader3 = cmd3.ExecuteReader();

                        listaBases = new List<string>();
                        string servico = "";
                        string sibString = "";
                        idSupplier = item2.IdSupplier;

                        drw = dt.NewRow();

                        while (reader3.Read())
                        {
                            servico = reader3["Servicos_Nome"].ToString();
                            sibString = reader3["SIB"].ToString();
                            listaBases.Add(reader3["Base"].ToString());

                        }




                        if (cabecalho)
                        {
                            for (int i = 0; i < listaBases.Count; i++)
                            {
                                d = "C" + Convert.ToString(i + 1);
                                drw[d] = listaBases[i];
                            }

                            if (naoSib && (sibString.ToString().Equals("") || sibString.ToString().Equals("False")))
                            {
                                drw["Servico"] = "P R I V A T E   S E R V I C E S";
                                naoSib = false;
                            }

                            dt.Rows.Add(drw);

                            drw = dt.NewRow();

                            cabecalho = false;

                        }


                        if (sib && sibString.Equals("True"))
                        {
                            drw["Servico"] = "R E G U L A R   S E R V I C E S";
                            dt.Rows.Add(drw);
                            drw = dt.NewRow();
                            sib = false;
                        }           


                        sql5 = "SELECT ";
                        if (!subServico)
                        {
                            sql5 = sql5 + "TOP(1) Monta_Servico.IdMServico AS IdServico, Monta_Servico.MServico_DataFrom ";
                        }
                        else
                        {
                            sql5 = sql5 + "DISTINCT(Monta_Servico.IdMServico) AS IdServico, Monta_Servico.MServico_DataFrom ";
                        }
                        sql5 = sql5 + "FROM Monta_Servico_Valores  ";
                        sql5 = sql5 + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                        sql5 = sql5 + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                        sql5 = sql5 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                        sql5 = sql5 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                        sql5 = sql5 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                        sql5 = sql5 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id = Monta_Servico_Valores.S_mercado_tarifa_status_id ";
                        sql5 = sql5 + "WHERE S_Servicos.Servicos_Id = " + item2.IdServico;
                        if (subServico)
                        {
                            sql5 = sql5 + "AND Monta_Servico.S_id = " + idSupplier;
                        }
                        sql5 = sql5 + " ORDER BY Monta_Servico.MServico_DataFrom, IdServico ";

                        SqlCommand cmd5 = new SqlCommand(sql5, Con);
                        SqlDataReader reader5 = cmd5.ExecuteReader();

                        while (reader5.Read())
                        {

                            if (!subServico)
                            {

                                sql7 = "SELECT Cidade.CID_nome, Monta_Servico.MServico_DataFrom, Monta_Servico.MServico_DataTo, S_Servicos.Servicos_Nome, S_Bases.Base_de, S_Bases.Base_ate, S_Bases.Moeda_id, S_Bases_Valor.S_Bases_Valor_valor, '' as S_mercado_tarifa_status_nome, Moeda_id  ";
                                sql7 = sql7 + "FROM S_Bases_Valor ";
                                sql7 = sql7 + "INNER JOIN Monta_Servico ON S_Bases_Valor.IdMServico = Monta_Servico.IdMServico ";
                                sql7 = sql7 + "INNER JOIN S_Bases ON S_Bases_Valor.Base_id = S_Bases.Base_id ";
                                sql7 = sql7 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico_Temporada ";
                                sql7 = sql7 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                                sql7 = sql7 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";

                                sql7 = sql7 + "WHERE S_Servicos.Servicos_Id = " + item2.IdServico;
                                sql7 = sql7 + "AND Servico_Completo.IdMServico = " + reader5["IdServico"];

                                sql7 = sql7 + " AND MServico_DataFrom <= '" + dataFrom.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataTo.ToString("yyyyMMdd") + "'";

                                /////COMEÇA O OR

                                sql7 = sql7 + " OR S_Servicos.Servicos_Id = " + item2.IdServico;
                                sql7 = sql7 + " AND Servico_Completo.IdMServico = " + reader5["IdServico"];
                                sql7 = sql7 + " AND MServico_DataFrom <= '" + dataTo.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataFrom.ToString("yyyyMMdd") + "'";                                

                                sql7 = sql7 + " ORDER BY Cidade.CID_nome, S_Servicos.Servicos_Nome, S_Bases.Base_ate, S_Bases.Base_de, Monta_Servico.MServico_DataFrom ";



                                SqlCommand cmd7 = new SqlCommand(sql7, Con);
                                SqlDataReader reader7 = cmd7.ExecuteReader();

                                //bool passou = false;
                                int coluna = 1;
                                while (reader7.Read())
                                {
                                    cambio = 1;
                                    if (Convert.ToInt32(reader7["Moeda_id"]) != 1 )
                                    {
                                        cambio = utils.CalcularCambio(Convert.ToInt32(reader7["Moeda_id"]), 1);
                                    }



                                 
                                    adiciona = true;
                                    drw["Servico"] = servico;
                                    drw["D20"] = string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:MMM, dd yyyy}", reader7["MServico_DataFrom"]) + " - " + string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:MMM, dd yyyy}", reader7["MServico_DataTo"]);
                                    //drw["D20"] = String.Format("{0:dd/MM/yyyy}", reader7["MServico_DataFrom"]) + " - " + String.Format("{0:dd/MM/yyyy}", reader7["MServico_DataTo"]);                                  

                                    d = "D" + coluna.ToString();

                                    if (coluna < 19)
                                    {
                                        total = arrendodar(Convert.ToDecimal(NuloZero(reader7["S_Bases_Valor_valor"].ToString())) * cambio + ((Convert.ToDecimal(NuloZero(reader7["S_Bases_Valor_valor"].ToString())) * cambio) / 100) * markUp);
                                        totalString = Convert.ToString(total.ToString("N2"));
                                        drw[d] = totalString;
                                    }

                                    coluna = coluna + 1;

                                }

                            }
                            else
                            {
                                sql4 = "SELECT Cidade.CID_nome, Monta_Servico.MServico_DataFrom, Monta_Servico.MServico_DataTo, S_Servicos.Servicos_Nome, S_Bases.Base_de, S_Bases.Base_ate, S_Bases.Moeda_id, ";
                                sql4 = sql4 + "Monta_Servico_Valores.MServico_Valores_Bulk_Total, S_mercado_tarifa_status_nome, Servico_Completo.SubServico, Servico_Completo.IdMServico_Temporada ";
                                sql4 = sql4 + "FROM Monta_Servico_Valores  ";
                                sql4 = sql4 + "INNER JOIN Monta_Servico ON Monta_Servico_Valores.IdMServico = Monta_Servico.IdMServico ";
                                sql4 = sql4 + "INNER JOIN S_Bases ON Monta_Servico_Valores.Base_id = S_Bases.Base_id ";
                                sql4 = sql4 + "INNER JOIN Servico_Completo ON Monta_Servico.IdMServico = Servico_Completo.IdMServico ";
                                sql4 = sql4 + "INNER JOIN S_Servicos ON Servico_Completo.Servicos_Id = S_Servicos.Servicos_Id ";
                                sql4 = sql4 + "INNER JOIN Cidade ON S_Servicos.Cid_Id = Cidade.CID_id ";
                                sql4 = sql4 + "LEFT OUTER JOIN S_Mercado_Tarifa_Status ON S_Mercado_Tarifa_Status.S_mercado_tarifa_status_id = Monta_Servico_Valores.S_mercado_tarifa_status_id ";
                                
                                sql4 = sql4 + "WHERE S_Servicos.Servicos_Id = " + item2.IdServico;
                                sql4 = sql4 + "AND Monta_Servico.IdMServico = " + reader5["IdServico"];

                                sql4 = sql4 + " AND MServico_DataFrom <= '" + dataFrom.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataTo.ToString("yyyyMMdd") + "'";

                                /////COMEÇA O OR

                                sql4 = sql4 + " OR S_Servicos.Servicos_Id = " + item2.IdServico;
                                sql4 = sql4 + " AND Monta_Servico.IdMServico = " + reader5["IdServico"];
                                sql4 = sql4 + " AND MServico_DataFrom <= '" + dataTo.ToString("yyyyMMdd") + "' and MServico_DataTo >= '" + dataFrom.ToString("yyyyMMdd") + "'";

                                sql4 = sql4 + " ORDER BY Cidade.CID_nome, S_Bases.Base_ate, S_Servicos.Servicos_Nome, S_Bases.Base_de, Monta_Servico.MServico_DataFrom ";



                                SqlCommand cmd4 = new SqlCommand(sql4, Con);
                                SqlDataReader reader4 = cmd4.ExecuteReader();

                                //bool passou = false;
                                int coluna = 1;
                                while (reader4.Read())
                                {


                                    if (reader4["MServico_Valores_Bulk_Total"].ToString().Equals(""))
                                    {
                                        totalString = reader4["S_mercado_tarifa_status_nome"].ToString();
                                    }
                                    else
                                    {
                                        cambio = 1;
                                        if (Convert.ToInt32(reader4["Moeda_id"]) != 1)
                                        {
                                            cambio = utils.CalcularCambio(Convert.ToInt32(reader4["Moeda_id"]), 1);
                                        }


                                        total = arrendodar(Convert.ToDecimal(reader4["MServico_Valores_Bulk_Total"].ToString()) * cambio + ((Convert.ToDecimal(reader4["MServico_Valores_Bulk_Total"].ToString()) * cambio) / 100) * markUp);
                                        totalString = Convert.ToString(total.ToString("N2"));
                                    }

                                    //drw["Servico"] = ""; 
                                    //if (passou == false)
                                    //{
                                    //drw["Servico"] = reader4["MServico_DataFrom"];
                                    adiciona = true;
                                    drw["Servico"] = servico;
                                    drw["D20"] = string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:MMM, dd yyyy}", reader4["MServico_DataFrom"]) + " - " + string.Format(new System.Globalization.CultureInfo("en-GB"), "{0:MMM, dd yyyy}", reader4["MServico_DataTo"]); //String.Format("{0:dd/MM/yyyy}", reader4["MServico_DataFrom"]) + " - " + String.Format("{0:dd/MM/yyyy}", reader4["MServico_DataTo"]);
                                    //drw["D7"] = " -     .";
                                    //drw["D8"] = String.Format("{0:d/M/yyyy}", reader4["MServico_DataTo"]);

                                    //    dt.Rows.Add(drw);
                                    //    drw = dt.NewRow();
                                    //    passou = true;
                                    //}

                                    d = "D" + coluna.ToString();
                                    drw[d] = totalString;

                                    coluna = coluna + 1;

                                }
                            }

                            if (adiciona)
                            {
                                dt.Rows.Add(drw);
                                drw = dt.NewRow();
                                adiciona = false;
                            }

                        }

                    }
                }

                RptServicosTarifario rpt = new RptServicosTarifario();

                rpt.SetDataSource(dt);


                rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "tarifarioservicos");

            }
            catch (Exception ex)
            {

                Response.Write(ex.Message);
            }

        }

        protected Decimal arrendodar(Decimal valor)
        {
            decimal valorArr = 0;
            try
            {
                string[] pars = Convert.ToDecimal(valor).ToString().Split(',');
                double valorArredondado = 0;
                ArredondaDAL arrd = new ArredondaDAL();
                if (pars.Count() > 1)
                {
                    Arredonda arr;

                    if (pars[1].Length == 1)
                    {
                        string val = pars[1] + 0;
                        arr = arrd.ObterArr(Convert.ToInt32(val.Substring(0, 2)));
                    }
                    else
                    {
                        arr = arrd.ObterArr(Convert.ToInt32(pars[1].Substring(0, 2)));
                    }

                    if (arr.Arredonda_recebe < 1)
                    {
                        valorArr = Convert.ToDecimal(pars[0]) + Convert.ToDecimal(arr.Arredonda_recebe);
                        valorArredondado = Convert.ToDouble(valorArr);
                    }
                    else
                    {
                        valorArr = Convert.ToDecimal(pars[0]) + Convert.ToDecimal(arr.Arredonda_recebe);
                        valorArredondado = Convert.ToDouble(valorArr);
                    }
                }

                return valorArr;

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

            return valorArr;
        }

        #endregion

        #region Regras

        protected String BrancoNulo(string texto)
        {
            if (texto.Equals(""))
            {
                return null;
            }
            else
            {
                return texto;
            }

        }

        protected String BrancoZero(string texto)
        {
            if (texto.Equals(""))
            {
                return "0";
            }
            else
            {
                return texto;
            }
        }

        protected string NuloZero(string valor)
        {
            if (valor == null)
            {
                return "0";
            }
            else
            {
                return valor;
            }
        }

        #endregion

    }
}